package com.cms.recursoshumanos.json.object;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.cms.recursoshumanos.cache.UserInfoCache;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.object.Familiar;
import com.cms.recursoshumanos.object.Hospital;
import com.cms.recursoshumanos.object.Parentesco;
import com.cms.recursoshumanos.object.Persona;
import com.cms.recursoshumanos.object.list.ListaFamiliar;
import com.cms.recursoshumanos.object.list.ListaHospital;
import com.cms.recursoshumanos.utilities.Tool;

public class JsonObjectGetHospitalFamiliar 
{

	private static JsonObjectGetHospitalFamiliar _instance = null;
	public static JsonObjectGetHospitalFamiliar getInstance() {
		if(_instance == null)
			_instance = new JsonObjectGetHospitalFamiliar();
		
		return _instance;
	}
	private JSONObject jsonObject;
	public JsonObjectGetHospitalFamiliar()
	{
	}
	private String Result;
	private static final String
	
		GETHOSPITALFAMILIAR = "GETHOSPITALFAMILIAR",
		GETHOSPITALFAMILIAR_STATUS = "STATUS",
		GETHOSPITALFAMILIAR_DATA = "DATA",
		GETHOSPITALFAMILIAR_DATOS_FAMILIAR = "DATOS_FAMILIAR",
		GETHOSPITALFAMILIAR_DATOS_HOSPITAL = "DATOS_HOSPITAL",
				
		GETHOSPITALFAMILIAR_HOSPITAL_ID = "hospital_id",
		GETHOSPITALFAMILIAR_HOSPITAL_NOMBRE= "nombre_hospital",
		GETHOSPITALFAMILIAR_HOSPITAL_RIF = "rif_hospital",
		GETHOSPITALFAMILIAR_HOSPITAL_NRO_TLF_1 = "nro_tlf_hospital_1",
		GETHOSPITALFAMILIAR_HOSPITAL_NRO_TLF_2 = "nro_tlf_hospital_2",
		GETHOSPITALFAMILIAR_HOSPITAL_PERSONA_CONTACTO = "nombre_persona_contacto_hospital",
		GETHOSPITALFAMILIAR_HOSPITAL_NOMBRE_DIRECCION = "nombre_direccion",
	

		GETHOSPITALFAMILIAR_FAMILIAR_ID = "familiar_id",
		GETHOSPITALFAMILIAR_FAMILIAR_CI = "ci_familiar",
		GETHOSPITALFAMILIAR_FAMILIAR_NOMBRE_1 = "nombre_familiar_1",
		GETHOSPITALFAMILIAR_FAMILIAR_NOMBRE_2 = "nombre_familiar_2",
		GETHOSPITALFAMILIAR_FAMILIAR_APELLIDO_1 = "apellido_familiar_1",
		GETHOSPITALFAMILIAR_FAMILIAR_APELLIDO_2 = "apellido_familiar_2",
		GETHOSPITALFAMILIAR_FAMILIAR_FOTO = "foto_familiar",
		GETHOSPITALFAMILIAR_FAMILIAR_FECHA_NAC = "fecha_nacimiento",
		GETHOSPITALFAMILIAR_FAMILIAR_SEXO = "sexo_familiar",
		GETHOSPITALFAMILIAR_FAMILIAR_ASEGURADO = "asegurado",
		GETHOSPITALFAMILIAR_PARENTESCO_ID = "parentesco_id",
		GETHOSPITALFAMILIAR_PARENTESCO_NOMBRE = "nombre_parentesco",
		GETHOSPITALFAMILIAR_PARENTESCO_DESCRIPCION = "descripcion_parentesco";

	public void fromJSON (String jsonString) 
	{
		if (jsonString != null )
		{
			if (!jsonString.equals(""))
			{
				try
				{
					jsonObject = new JSONObject(jsonString);
		
					JSONObject getListaFamiliarHospital = jsonObject.getJSONArray(GETHOSPITALFAMILIAR).getJSONObject(0);
					String status = getListaFamiliarHospital.getString(GETHOSPITALFAMILIAR_STATUS);
					
					Result = status;
					
					if (status.equals(Constant.CODE_OK))
					{
						ListaHospital listado_hospital = new ListaHospital();
						ListaFamiliar listado_familiar = new ListaFamiliar();
						JSONArray data = getListaFamiliarHospital.getJSONArray(GETHOSPITALFAMILIAR_DATA);
						
						JSONObject objeto_data = data.getJSONObject(0);
						JSONArray datos_familiar = objeto_data.getJSONArray(GETHOSPITALFAMILIAR_DATOS_FAMILIAR);
						
						for (int i = 0; i < datos_familiar.length(); i++ )
						{
								JSONObject json_familiar = datos_familiar.getJSONObject(i);
								listado_familiar.addFamiliar(getElFamiliar(json_familiar));
						}
						
						UserInfoCache.getInstance().getPoliza().getSeguro().setListaHospital(listado_hospital);
						
						JSONArray datos_hospital = objeto_data.getJSONArray(GETHOSPITALFAMILIAR_DATOS_HOSPITAL);
						
						for (int i = 0; i < datos_hospital.length(); i++ )
						{
								JSONObject json_hospital = datos_hospital.getJSONObject(i);
								listado_hospital.addHospital(getHospital(json_hospital));
						}
						
						UserInfoCache.getInstance().setListaFamiliar(listado_familiar);
						
						
						
					}
					
				} 
				catch (JSONException ex) 
				{
					ex.printStackTrace();
					try 
					{
						JSONObject getListaFamiliarHospital = jsonObject.getJSONObject(GETHOSPITALFAMILIAR);
						String status = getListaFamiliarHospital.getString(GETHOSPITALFAMILIAR_STATUS);
						Result = status;
					} 
					catch (JSONException e) 
					{
						Result = Constant.CODE_EMPTY;
					}
				}
	
				catch (Exception ex) 
				{
					ex.printStackTrace();
					Result = Constant.CODE_EMPTY;
				}
			}
			else
			{
				Result = Constant.CODE_NOT_SERVER_RESPONSE;
			}
		}
		else
		{
			Result = Constant.CODE_NOT_SERVER_RESPONSE;
		}


	}
	public Familiar getElFamiliar(JSONObject json_familiar)
	{
		try 
		{
			Familiar elFamiliar = new Familiar(Integer.parseInt(json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_ID)),
													new Persona(0,json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_CI), 
													json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_NOMBRE_1),
													(json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_NOMBRE_2).equals("null")?
															null:
																json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_NOMBRE_2)),
													json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_APELLIDO_1),
													(json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_APELLIDO_2).equals("null") ?
															null:
																json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_APELLIDO_2)),
													null, 
													null, 
													null, 
													Constant.URL_FAMILIAR+json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_ID)+"/"+
															json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_FOTO),
													 
													Tool.getInstance().parseStringToDate(json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_FECHA_NAC)), 
													json_familiar.getString(GETHOSPITALFAMILIAR_FAMILIAR_SEXO),
													null), 
									 json_familiar.getBoolean(GETHOSPITALFAMILIAR_FAMILIAR_ASEGURADO),
									 new Parentesco(Integer.parseInt(json_familiar.getString(GETHOSPITALFAMILIAR_PARENTESCO_ID)), 
											 		json_familiar.getString(GETHOSPITALFAMILIAR_PARENTESCO_NOMBRE), 
											 		(json_familiar.getString(GETHOSPITALFAMILIAR_PARENTESCO_DESCRIPCION).equals("null") ?
											 				null :
											 					json_familiar.getString(GETHOSPITALFAMILIAR_PARENTESCO_DESCRIPCION)	
											 				)));
			return elFamiliar;
		} 
		catch (NumberFormatException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} 
		catch (JSONException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}
	
	public Hospital getHospital(JSONObject json_hospital)
	{
		try 
		{
			Hospital elHospital = new Hospital(Integer.parseInt(json_hospital.getString(GETHOSPITALFAMILIAR_HOSPITAL_ID)), 
												json_hospital.getString(GETHOSPITALFAMILIAR_HOSPITAL_NOMBRE), 
												json_hospital.getString(GETHOSPITALFAMILIAR_HOSPITAL_RIF), 
												json_hospital.getString(GETHOSPITALFAMILIAR_HOSPITAL_NRO_TLF_1), 
												(json_hospital.getString(GETHOSPITALFAMILIAR_HOSPITAL_NRO_TLF_2).equals("null") ? 
														null:
														json_hospital.getString(GETHOSPITALFAMILIAR_HOSPITAL_NRO_TLF_2)), 
												json_hospital.getString(GETHOSPITALFAMILIAR_HOSPITAL_PERSONA_CONTACTO), 
												json_hospital.getString(GETHOSPITALFAMILIAR_HOSPITAL_NOMBRE_DIRECCION));
			return elHospital;
		} 
		catch (NumberFormatException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} 
		catch (JSONException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}
	public String getResult()
	{
		return Result;
	}
	
}



